package 区间和;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class RangeSum {
    public static void main(String[] args) {
        /*
        给定一个整数数组 Array，请计算该数组在每个指定区间内元素的总和。


           第一行输入为整数数组 Array 的长度 n，接下来 n 行，每行一个整数，表示数组的元素。
           随后的输入为需要计算总和的区间下标：a，b （b > = a），直至文件结束。
         */

        /*
        假设输入如下：
        5
        1
        2
        3
        4
        5
        0 2
        1 4
        这意味着：
        数组 Array 长度为 5
        数组内容为 [1, 2, 3, 4, 5]
        需要计算的区间有两个：[0, 2] 和 [1, 4]
        对于区间 [0, 2]，元素总和为 1 + 2 + 3 = 6
        对于区间 [1, 4]，元素总和为 2 + 3 + 4 + 5 = 14

        输出结果
        对于每个区间，输出它的元素总和：

        6
        14

         */

        ArrayList<Integer> list = ArrayOfRangeSum();
        System.out.println(list);

    }

    public static ArrayList<Integer> ArrayOfRangeSum(){
        // 前缀思想，记录每一个前缀的和，就避免了后续重复遍历添加

        // 自定义输入一个整数数组
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int arrLength = Integer.parseInt(s);
        if ( arrLength <= 0 )
            return null;
        int[] arr = new int[arrLength];
        for (int i=0; i<arrLength; i++) {
            int num = sc.nextInt();
            arr[i] = num;
        }

        // 计算数组从 0 ~ index 之间的数组合，其中 index 从 0 一直取到 arrLength-1
        int[] sumArr = new int[arrLength];
        sumArr[0] = arr[0];
        for (int index = 1; index < arrLength; index++) {
            sumArr[index] = sumArr[index-1] + arr[index];
        }
        sc.nextLine();
        // 记录输入的每个区间之间的和
        ArrayList<Integer> list = new ArrayList<>();
        // 输入每个指定的区间( b > = a 的时候结束计算 )
        while ( true ){
            int a = sc.nextInt();
            int b = sc.nextInt();
            if ( b <= a )
                break;
            list.add(sumArr[b] - sumArr[a] + arr[a]);
        }
        return list;
    }
}
